<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="./promise.js"></script>
    <script>
        /*then返回的promise的结果由回调执行的结果决定
        回调执行结果：
        1.直接抛出错误
        2.返回成功的promise
        3.返回失败的promise
        4.返回非promise值
        4.返回pending的promise


        返回一个新的promise

        返回promise  ==》得到并改变它的状态
        返回一个非Promise ===》变为成功状态
        直接抛出错误==》 try---catch => 变为失败状态

        */




        new Promise((resolve,reject) =>{
           // setTimeout(() => {
      //   // resolve(1)
      //   // reject(2)
      // }, 1000);

      // resolve(3)
      reject(4)  
        }).then(
            value => {
        console.log('onResolved1', value)
      },
      reason => {
        console.log('onRejected1', reason)
        // 1) 抛出错误 => 失败, reason就是抛出的错误
        // throw 5

				// 2) 返回失败的promise => 失败, reason是失败promise的reason
        // return Promise.reject(6)

				// 3) 返回成功的promise => 成功, value是成功promise的value
        // return Promise.resolve(7)

				// 4) 返回其它非promise值  => 成功, value是返回值
        // return 8

				// 5) 返回pending的promise  => pending
        return new Promise(() => {}) 
      }
        ).then(
            value => {
        console.log('onResolved2', value)
      },
      reason => {
        console.log('onRejected2', reason)
      } 
        )
        const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve(1)
      }, 1000);
    })

    p.then(
      value => {},
      reason => {}
    )
    p.then(value => {})
    /* 
    1. 一个promise可以指定多个回调
    2. 当指定回调函数时, 
        如果promise还是pending, 内部会先保存回调函数
        等到变为成功或失败时, 才将对应的回调放入微队列中
    */

    </script>
</body>
</html>